package com.marketingexpert.service.snsmgnt;

import java.io.File;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import weibo4j.Emotion;
import weibo4j.Status;
import weibo4j.User;

import com.marketingexpert.exception.MarketingExpertException;

public interface SnsService {

	/**
	 * ��ȡrequestToken
	 * @param backUrl
	 * @return
	 */
	public RequestToken getRequestToken(String backUrl);

	/**
	 * ��ݴ���� request token �� verifier ��ȡ access token
	 * @param requestToken
	 * @param verifier
	 * @return
	 */
	public AccessToken gettAccessToken(RequestToken requestToken,
			String verifier);

	/**
	 *  ��ݴ���� Access Token �����ݷ��?����΢��
	 * @param token
	 * @param tokenSec
	 * @param content
	 */
	public String update(String token, String tokenSec, String content)  throws MarketingExpertException;
	
	/**
	 * ��ݴ���� Access Token �����ݷ����ͼƬ��΢��
	 * @param token
	 * @param tokenSec
	 * @param content
	 * @param imageSavePath
	 */
	public String upload(String token, String tokenSec, String content, File image); 

	/**
	 * ��ȡ΢���û�����ϸ��Ϣ
	 * @param token
	 * @param tokenSec
	 * @param userId
	 * @return
	 */
	public com.marketingexpert.service.snsmgnt.User getUserDetails(String token, String tokenSec, String userId);
	
	/**
	 * ��ȡ�ҹ�ע��΢������
	 */
	public int getUserFriendsCount(String token, String tokenSec,String userId);
	
	/**
	 * ��ȡ�ҵķ�˿����(Ŀǰ����΢��)
	 * @param token
	 * @param tokenSec
	 * @param userId
	 * @return
	 */
	public int getMyFollowerCount(String token, String tokenSec, String userId);
	
	/**
	 * ��ȡ�Ƿ��עĳ�û�
	 * @param token
	 * @param tokenSec
	 * @param myId
	 * @param friendId
	 * @return
	 */
	public boolean existsFriendship(String token, String tokenSec, String myId,String friendId);
	
	/**
	 * ȡ���ע
	 * @param token
	 * @param tokenSec
	 * @param destoryUserId
	 * @return
	 */
	public com.marketingexpert.service.snsmgnt.User destroyFriendship(String token, String tokenSec,String destoryUserId);
	
	/**
	 * ��ȡ�����ע����ϵ���б�
	 * @param token
	 * @param tokenSec
	 * @param userId
	 * @param cursor
	 * @return
	 */
	public List<com.marketingexpert.service.snsmgnt.User> getFriendsStatuses(String token, String tokenSec, String userId,int cursor);
	
	/**
	 * ��ȡ�ҵķ�˿
	 * @param token
	 * @param tokenSec
	 * @param userId
	 * @param cursor
	 * @return
	 */
	public List<com.marketingexpert.service.snsmgnt.User> getFollowedMeStatues(String token, String tokenSec, String userId,int cursor);
	
	/**
	 * ��ȡ�ҵķ�˿,ȡ��public List<com.marketingexpert.service.snsmgnt.User> getFriendsStatuses�������
	 * @param token
	 * @param tokenSec
	 * @param userId
	 * @param cursor
	 * @return
	 * @throws MarketingExpertException
	 */
	public Map<String,Object> getMyFollowers(String token, String tokenSec,
			String userId, int cursor) throws MarketingExpertException;
	
	void reInitialize();
	
	/**
	 * ����ӿ�(Ŀǰ����΢��)
	 * @param type
	 * @param language
	 * @return
	 */
	public List<Emotion> getEmotions(String type, String language);
	
	/**
	 * ��ȡ�ҵ���ҳ
	 * @param token
	 * @param tokenSec
	 * @param page
	 * @param since_id
	 * @param max_id
	 * @return
	 */
	public JSONArray getFriendsTimeline(String token, String tokenSec, int page,String since_id,String max_id);

	/**
	 * ��ȡ�ҵ�΢��
	 * @param token
	 * @param tokenSec
	 * @param page
	 * @param since_id
	 * @param max_id
	 * @return
	 */
	public JSONArray getUserTimeline(String token, String tokenSec, int page,String since_id,String max_id,int baseApp);
	
	/**
	 * ת��΢��
	 * @param sid
	 * @param status
	 * @param isComment�Ƿ���ת����ͬʱ��������0��ʾ���������ۣ�1��ʾ�������۸�ǰ΢����2��ʾ�������۸�ԭ΢����3��1��2�����?Ĭ��Ϊ0��
	 * @return
	 */
	public String repostWeibo(String sid, String status, int isComment, String token, String tokenSec);
	
	/**
	 * ��һ��΢����������(Ŀǰ����΢��)
	 * @param token
	 * @param tokenSec
	 * @param sid
	 * @param comment
	 * @param cid
	 * @param without_mention
	 * @param comment_ori
	 * @return
	 */
	public String updateComment(String token, String tokenSec,String sid,String comment, String cid ,int without_mention, int comment_ori);

	/**
	 * ��ȡĳһ��΢���µ�����
	 * @param sid
	 * @return
	 */
	public JSONArray getComments(String sid,String token, String tokenSec);

	/**
	 * ��һ��΢����������(Ŀǰ����΢��)
	 * @param sid
	 * @param comment
	 * @param commentOri
	 * @param cid
	 * @return
	 */
	public String CommentWeibo(String sid, String comment, int commentOri,
			String cid,String token, String tokenSec);


	/**
	 * ���һ���ղ�
	 * @param token
	 * @param secret
	 * @param messageId
	 */
	public void createFavorite(String token, String secret,String messageId);

	/**
	 * ɾ��΢��(Ŀǰ����΢��)
	 * @param accessToken
	 * @param secret
	 * @param messageId
	 */
	public void destoryStatus(String accessToken, String secret,
			String messageId);

	/**
	 * ȡ���ղ�
	 * @param accessToken
	 * @param secret
	 * @param messageId
	 */
	public void destoryFavorite(String accessToken, String secret,
			String messageId);

	/**
	 * ��ȡһ��΢�������ۼ�ת����
	 * @param messageId
	 * @return
	 */
	public JSONArray getRtCtCounts(String token, String tokenSec,String messageId)  throws MarketingExpertException;

	/**
	 * ��ȡ��ǰ�û��������б�(��δʵ����Ѷ΢����ȡ�ҵ�����)
	 * @param token
	 * @param secret
	 * @param page
	 * @param sinceId
	 * @return
	 */
	public JSONArray getCommentsTimeline(String token, String secret,
			int page, String since_id,String max_id);

	/**
	 * ��ȡĳһ�����µ�΢��
	 * @param accessToken
	 * @param secret
	 * @param page
	 * @param sinceId
	 * @param keyword :���������
	 * @return
	 */
	public JSONArray getTrendTimeline(String accessToken, String secret,
			int page, String sinceId,String keyword,String max_id);

	/**
	 * ��ȡ���Ż���,keyword��ʶ����������(����,����,��ǰһСʱ)(Ŀǰ����΢��)
	 * @param keyword
	 * @return
	 */
	public JSONArray getHotTrendsTimeline(String keyword,Integer baseApp);

	/**
	 * ��ȡ@�ᵽ�ҵ�΢��
	 * @param accessToken
	 * @param secret
	 * @param page
	 * @param sinceId
	 * @param maxId
	 * @return
	 */
	public JSONArray getMentionsTimeline(String accessToken, String secret,
			int page, String sinceId, String maxId);

	
	/**
	 * �ظ�����
	 * @param sid
	 * @param comment
	 * @param cid
	 * @return
	 */
	public String reply(String sid, String comment, String cid);

	/**
	 * ɾ��һ�����Լ�������
	 * @param sid
	 * @return
	 */
	public String deleteComment(String sid);

	
	/**
	 * ��ȡ�ҵ�˽��
	 * @param accessToken
	 * @param secret
	 * @param page
	 * @param sinceId
	 * @param maxId
	 * @return
	 */
	public JSONArray getDirectMessageTimeline(String accessToken,
			String secret, int page, String sinceId, String maxId);
	
	public Map<String , Object> getTXtrendTimeline(String token, String tokenSec,
			int page,String keyword, String pageInfo);
	
	public String shortUrl(String url);
	
	/**
	 * ����һ��˽��
	 * @param accessToken
	 * @param secret
	 * @param receiverName
	 * @param content
	 */
	public void sendPrivateMessage(String token,String tokenSec,String receiverName,String content);

	/**
	 * ��ȡ�ҵ��ղ�
	 * @param accessToken
	 * @param secret
	 * @param page
	 * @return
	 */
	public JSONArray getFavorites(String accessToken, String secret,
			String pageParam, String maxId);

	/**
	 * 从新浪微博查询自动营销的微博素材
	 * @param uid 用于查找的微博用户的id列表
	 * @return
	 * @throws MarketingExpertException
	 */
	public Map<String,Object> getOneTrendMessage(String uids);
	
	/**
	 * �������Ҫ����(�ᵼ����Ӧ����)
	 * @param token
	 * @param tokenSec
	 * @param userId
	 * @param cursor
	 * @return
	 */
	public List<com.marketingexpert.service.snsmgnt.User> getMyFollowsSpecial(String token, String tokenSec,
			String userId, int cursor);
	
	/**
	 * ��עĳ��
	 * @param token
	 * @param tokenSec
	 * @param user_id
	 */
	public boolean createFriendship(String token, String tokenSec, String user_id);
	
	/**
	 * ����΢��
	 * @param q
	 * @param page
	 * @param pageCount
	 * @param base_app
	 * @param filter_ori
	 * @param needcount
	 * @return
	 */
	public JSONArray statusSearch(String q, int page, int pageCount, int base_app,int filter_ori,boolean needcount);

	public void logout(String uid);
	
	public Map<String, Object> getUserTimelineForPublic(String token, String tokenSec, int page,
			String sinceId, String maxId,int baseApp);
	
}
